// 从 NestJS 公共模块导入 Controller、Get、Post、Body、Param、UsePipes 和 ValidationPipe 装饰器，用于定义控制器和处理请求
import { Controller, Get, Post, Body, Param, UsePipes, ValidationPipe } from '@nestjs/common';
// 导入帖子服务类
import { PostsService } from './posts.service';
// 导入创建帖子数据传输对象
import { CreatePostDto } from './dto/create-post.dto';

/**
 * 帖子控制器类，处理与帖子相关的 HTTP 请求
 * 路由前缀为 'posts'
 */
@Controller('posts')
export class PostsController {
  /**
   * 构造函数，注入帖子服务
   * @param postsService - 帖子服务实例
   */
  constructor(private readonly postsService: PostsService) {}

  /**
   * 处理 GET /posts 请求，查询所有帖子
   * @returns 返回所有帖子的数组
   */
  @Get()
  findAll() {
    // 调用帖子服务的 findAll 方法查询所有帖子
    return this.postsService.findAll();
  }

  /**
   * 处理 GET /posts/:id 请求，根据 ID 查询单个帖子
   * @param id - 帖子的 ID，从请求参数中获取，使用 + 运算符将其转换为数字类型
   * @returns 返回查询到的帖子
   */
  @Get(':id')
  findOne(@Param('id') id: string) {
    // 调用帖子服务的 findOne 方法根据 ID 查询帖子，将参数转换为数字类型
    return this.postsService.findOne(+id);
  }

  /**
   * 处理 POST /posts 请求，创建新帖子
   * 使用 ValidationPipe 对请求体进行数据验证
   * @param createPostDto - 创建帖子的数据传输对象，从请求体中获取
   * @returns 返回创建成功的帖子
   */
  @Post()
  @UsePipes(ValidationPipe)
  create(@Body() createPostDto: CreatePostDto) {
    // 调用帖子服务的 create 方法创建新帖子
    return this.postsService.create(createPostDto);
  }
}